﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Bussiness.Entity;
using Bussiness.Manager;
using AF_ORM.CORE;
namespace DSC
{
    public partial class frmServiceDetail : AfChildrenForm
    {
        public string infoBeforeChange { set; get; }
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape) // thoat
            {
                this.Close();
                return true;
            }
            if (keyData == Keys.F5) // Luu thong tin
            {
                SaveInfo();
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        public frmServiceDetail()
        {
            InitializeComponent();
            LoadType();
            LoadLoaiXe();
            if(IsEdit)
                LoadEdit();
        }
        public frmServiceDetail(int _id,string _ServiceCode,string _Model, bool _IsEdit)
        {
            ServiceID = _id;
            ServiceCode = _ServiceCode;
            Model = _Model;
            IsEdit = _IsEdit;
            InitializeComponent();
            LoadType();
            LoadLoaiXe();
            if (IsEdit)
                LoadEdit();
        }
        //// khai bao mot ham delegate
        //public delegate void LoadGridView();
        //// khai bao 1 kieu ham delegate
        //public LoadGridView MyLoadGridView;

        public bool IsEdit { set; get; }
        public int ServiceID { set; get; }
        public string ServiceCode { set; get; }
        public string Model { set; get; }
        public void LoadEdit()
        {
            PT_ServiceListEntity obj = PT_ServiceListManager.CreateInstant().GetByID(ServiceID);
            if (obj != null)
            {
                txtServiceCode.Text = obj.ServiceCode;
                txtServiceName.Text = obj.ServiceName;
                PT_Service_ModelEntity SMObj = PT_Service_ModelManager.CreateInstant().GetByServiceAndModel(ServiceCode, Model);
                if (SMObj != null)
                {
                    txtInPrice.Value = (decimal)SMObj.Price;
                    txtoutPrice.Value = (decimal)SMObj.AgentPrice;
                    cmbLoaiXe.SelectedValue = SMObj.ModelCode;
                }
                ddlType.SelectedValue = obj.ServiceType;
                chkCanEditGiaBan.Checked = obj.CanEditGiaBan;
                checkCanEditGCN.Checked = obj.CanEditGCN;
                checkCanEditGiamGia.Checked = obj.CanEditGiamGia;
                checkCanEditND.Checked = obj.CanEditNoiDung;
            }
            infoBeforeChange = GetInfo();
        }
        private void LoadType()
        {
            List<ServiceType> lst = ENUM.ServiceType_SelectAll();
            ddlType.DataSource = lst;
            ddlType.ValueMember = "value";
            ddlType.DisplayMember = "text";
            ddlType.SelectedText = "";
            ddlType.Text = "[Chọn loại dịch vụ]";
        }
        private void LoadLoaiXe()
        {
            PT_HondaModelEntity obj = new PT_HondaModelEntity();
            obj.IsDeleted = false;
            obj.IsActive = true;
            SelectOptions option = new SelectOptions();
            option.AddSortField("OrderIndex", true);
            DataTable tbl = PT_HondaModelManager.CreateInstant().SelectWithCondition(obj, option);
            DataRow dr = tbl.NewRow();
            dr["ModelCode"] = "ALL";
            tbl.Rows.InsertAt(dr, 0);
            cmbLoaiXe.DataSource = tbl;
            cmbLoaiXe.DisplayMember = "ModelCode";
            cmbLoaiXe.ValueMember = "ModelCode";
        }
        private bool CheckInput()
        {
            string message = "";
            if (string.IsNullOrEmpty(txtServiceCode.Text))
            {
                message += "- Mã dịch vụ\r\n";
            }
            if (string.IsNullOrEmpty(txtServiceName.Text))
            {
                message += "- Tên dịch vụ\r\n";
            }
            if (string.IsNullOrEmpty((string)ddlType.SelectedValue) || ddlType.SelectedValue == null)
            {
                message += "- Loại dịch vụ\r\n";
            }
            if (!string.IsNullOrEmpty(message))
            {
                MessageBox.Show("Vui lòng điền đầy đủ các thông tin sau:\r\n" + message);
                return false;
            }
            return true;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            SaveInfo();
        }
        private void SaveInfo()
        {
            if (CheckInput())
            {
                PT_ServiceListEntity obj = new PT_ServiceListEntity();
                obj.ServiceCode = txtServiceCode.Text.Trim();
                obj.ServiceName = txtServiceName.Text.Trim();
                PT_Service_ModelEntity SMObj = PT_Service_ModelManager.CreateInstant().GetByServiceAndModel(txtServiceCode.Text.Trim(), cmbLoaiXe.SelectedValue.ToString());
                if (SMObj != null)
                {
                    SMObj.AgentPrice = (double)txtInPrice.Value;// gia tri
                    SMObj.Price = (double)txtoutPrice.Value;// gia ban

                    PT_Service_ModelManager.CreateInstant().Update(SMObj);
                }
                else
                {
                    SMObj = new PT_Service_ModelEntity();
                    SMObj.ServiceCode = txtServiceCode.Text.Trim();
                    SMObj.ModelCode = cmbLoaiXe.SelectedValue.ToString();
                    SMObj.AgentPrice = (double)txtInPrice.Value;// gia tri
                    SMObj.Price = (double)txtoutPrice.Value;// gia ban
                    PT_Service_ModelManager.CreateInstant().Insert(SMObj);
                }
                //obj.ServicePrice = (double)txtInPrice.Value;// gia tri
                //obj.AgentPrice = (double)txtoutPrice.Value; // gia ban
                obj.CanEditNoiDung = checkCanEditND.Checked;
                obj.CanEditGCN = checkCanEditGCN.Checked;
                obj.CanEditGiamGia = checkCanEditGiamGia.Checked;
                obj.CanEditGiaBan = chkCanEditGiaBan.Checked;// can edit thanh tien
                obj.ServiceType = ddlType.SelectedValue.ToString();
                obj.IsDeleted = false;
                if (IsEdit == true)
                {
                    obj.Id = ServiceID;
                    obj.UpdatedBy = SessionLogin.UserCode;
                    obj.UpdatedDate = DateTime.Now;
                    if (PT_ServiceListManager.CreateInstant().Update(obj) != null)
                    {
                        MessageBox.Show("Cập nhật thông tin thành công");
                        // history
                        PT_ActionHistoryManager.CreateInstant().SaveHistory(SessionLogin.UserId, "Cập nhật thông tin hạng mục sửa chữa", infoBeforeChange + " ---- " + GetInfo());
                    }
                    else
                        MessageBox.Show("Cập nhật thông tin không thành công. Vui lòng thử lại");
                }
                else
                {
                    obj.CreatedBy = SessionLogin.UserCode;
                    obj.CreatedDate = DateTime.Now;
                    if (PT_ServiceListManager.CreateInstant().Insert(obj) != null)
                    {
                        MessageBox.Show("Thêm hạng mục thành công");
                        ResetForm();
                        // histoty
                        PT_ActionHistoryManager.CreateInstant().SaveHistory(SessionLogin.UserId, "Thêm hạng mục sửa chữa", GetInfo());
                    }
                    else
                        MessageBox.Show("Thêm hạng mục không thành công. Vui lòng thử lại");
                }
                RaiseChangeDataEvent();
            }
        }
        private void txtInPrice_KeyUp(object sender, KeyEventArgs e)
        {
            //txtInPrice.Value = txtInPrice.Value;
        }

        private void txtoutPrice_KeyUp(object sender, KeyEventArgs e)
        {
            //txtoutPrice.Value = txtoutPrice.Value;
        }
        private void ResetForm()
        {
            txtServiceCode.Text = "";
            txtServiceName.Text = "";
            txtInPrice.Value = 0;
            txtoutPrice.Value = 0;
            ddlType.SelectedValue = "";
            chkCanEditGiaBan.Checked = false;
            checkCanEditGCN.Checked = false;
            checkCanEditGiamGia.Checked = false;
            checkCanEditND.Checked = false;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //RaiseChangeDataEvent();
        }
        public string GetInfo()
        {
            return "Mã hạng mục:" + txtServiceCode.Text + "\nTên hạng mục:" + txtServiceName.Text + "\nLoại xe:" + cmbLoaiXe.Text + "\nGiá bán:" + txtInPrice.Value + "\nGiá Công thợ:" +
                   txtoutPrice.Value+"\nLoại:"+ddlType.Text+"\nEdit giá bán:"+chkCanEditGiaBan.Checked+"\nEdit GCN:"+checkCanEditGCN.Checked+"\nEdit Giảm giá:"+checkCanEditGiamGia.Checked+
                   "\nEdit nội dung:"+checkCanEditND.Checked;
        }

        private void ddlType_SelectedValueChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(ddlType.SelectedValue.ToString()))
            {
                if (ddlType.SelectedValue.ToString() == "GCN")
                    checkCanEditGCN.Enabled = true;
                else
                {
                    checkCanEditGCN.Enabled = false;
                    checkCanEditGCN.Checked = false;
                }
            }
        }
    }
}
